package br.com.caiopsousa.mongodb;

import java.sql.Date;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import br.com.caiopsousa.mongodb.document.Pessoa;

/**
 * Hello world!
 * 
 */
public class App {

	@SuppressWarnings({ "deprecation", "resource" })
	public static void main(String[] args) {

		ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml");
		MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");
		
		// Salvar
		Pessoa pessoa = new Pessoa("Caio Pereira", new Date(1989, 2, 8));
		mongoOperation.save(pessoa);
	 
		// Verificar o id criado automaticamente
		System.out.println("1. pessoa : " + pessoa);
	 
		// Query que busca o registro
		Query queryBusca = new Query(Criteria.where("nome").is("Caio Pereira"));
		pessoa = mongoOperation.findOne(queryBusca, Pessoa.class);
		System.out.println("2. Busca - pessoa : " + pessoa);
	 
		// Update
		mongoOperation.updateFirst(queryBusca, Update.update("nome", "Caio Sousa"), Pessoa.class);
	 
		// Busca novamente*/
		queryBusca = new Query(Criteria.where("nome").is("Caio Sousa"));
		pessoa = mongoOperation.findOne(queryBusca, Pessoa.class);
	 
		System.out.println("3. Update - busca : " + pessoa);
	 
		// Exclui
		mongoOperation.remove(queryBusca, Pessoa.class);
	 
		// Lista
		List<Pessoa> listUser = mongoOperation.findAll(Pessoa.class);
		System.out.println("4. Número de pessoas = " + listUser.size());

	}

}
